
package com.spring.mvc.controller;

import java.security.Principal;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.spring.mvc.util.Constantes;
import com.spring.mvc.util.Utilitarios;


@Controller
public class LoginController{
	

     
    private static String NAVEGACION = ""; 
   
	@RequestMapping( value="/procesoBienvenida.do", method=RequestMethod.GET )
	public ModelAndView procesoBienvenida( ModelMap modelo, Principal data, HttpServletRequest request ){
		   System.out.println( "DENTRO DE [procesoBienvenida]" );
		
		   String nombre = "";
		   HttpSession session = request.getSession();
		   
	       Authentication autenticacion = SecurityContextHolder.getContext().getAuthentication();
	       nombre = autenticacion.getName();		
	       System.out.println( "NOMBRE [AUTENTICACION] (FORMA #1): " + nombre );   
		
	       nombre = data.getName();			
	       System.out.println( "NOMBRE [AUTENTICACION] (FORMA #2): " + nombre );  
 
	       Object  objData = (Object)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
	       Object  objRol  = (Object)SecurityContextHolder.getContext().getAuthentication().getAuthorities();  //PODEMOS VALIDAR Y REDIRECCIONAR.  

	       System.out.println( "- DATA: " +objData );  //Data completa.
	       System.out.println( "- ROl:  " +objRol );  //Rol en si.
	       
		   NAVEGACION = "menu";
		
	       ModelAndView objNavegacion = new ModelAndView( NAVEGACION ); 
	       session.setAttribute("desUsuarioLogin", nombre);
//           objNavegacion.addObject( "usuarioLogin", nombre );
//           objNavegacion.addObject( "mensajeLogin", Constantes.SECURITY_MSG_BIENVENIDA_01 );
	       
		   return objNavegacion;
	}
	
	
	
	
    /**
     * procesoLogin_OK
     * @param  modelo
     * @param  request
     * @return ModelAndView
     **/
	@RequestMapping( value="/procesoLogin_OK.do", method=RequestMethod.GET )
	public ModelAndView procesoLogin_OK( ModelMap modelo, HttpServletRequest request ){
		   System.out.println( "DENTRO DE [procesoLogin_OK]" );
	  
		   NAVEGACION = "login";
			
	       ModelAndView objNavegacion = new ModelAndView( NAVEGACION ); 
		
		   return objNavegacion;
	}
	
    /**
     * procesoLogin_ERROR
     * @param  modelo
     * @param  request
     * @return ModelAndView
     **/
	@RequestMapping( value="/procesoLogin_ERROR.do", method=RequestMethod.GET )
	public ModelAndView procesoLogin_ERROR( ModelMap modelo, HttpServletRequest request ){
		   System.out.println( "DENTRO DE [procesoLogin_ERROR]" ); 
			
		   String vErrorParam = request.getParameter( "errorParam" );
		   System.out.println( "PARAMETRO: " + vErrorParam ); 
	 
		   NAVEGACION = "login";
			
	       ModelAndView objNavegacion = new ModelAndView( NAVEGACION ); 
	         
	       if( vErrorParam != null ){
	           objNavegacion.addObject( "errorParam", "TRUE" );
	           objNavegacion.addObject( "mensajeError_01", Constantes.SECURITY_MSG_ERROR_01 );
	           objNavegacion.addObject( "mensajeError_02", Constantes.SECURITY_MSG_ERROR_02 );
	           objNavegacion.addObject( "mensajeError_03", Constantes.SECURITY_MSG_ERROR_03 );
	       }
	       
	       return objNavegacion;
	}
	
    /**
     * procesoLogin_OUT
     * @param  modelo
     * @param  request
     * @return ModelAndView
     **/
	@RequestMapping( value="/procesoLogin_OUT.do", method=RequestMethod.GET )
	public ModelAndView procesoLogin_OUT( ModelMap modelo, HttpServletRequest request ){
		   System.out.println( "DENTRO DE [procesoLogin_OUT]" );
		
		   NAVEGACION = "login";
			
	       ModelAndView objNavegacion = new ModelAndView( NAVEGACION ); 
		   HttpSession session = request.getSession();
		   session.invalidate();		
		
		   return objNavegacion;
	}
 
    /**
     * procesoAccesoRestringido
     * @param  modelo
     * @param  request
     * @return ModelAndView
     **/
	@RequestMapping( value="/procesoAccesoRestringido.do", method=RequestMethod.GET )
	public ModelAndView procesoAccesoRestringido( ModelMap modelo, HttpServletRequest request ){
		   System.out.println( "DENTRO DE [procesoAccesoRestringido]" );
		
		   NAVEGACION = "accesoRestringido";
			
	       ModelAndView objNavegacion = new ModelAndView( NAVEGACION ); 
		
		   return objNavegacion;
	}
	
	
	@RequestMapping( value="/procesoLogin_ERROR1.do", method=RequestMethod.GET )
	public ModelAndView procesoLogin_ERROR1( ModelMap modelo, HttpServletRequest request ){
		   System.out.println( "DENTRO DE [procesoLogin_ERROR]" ); 
			
		   String vErrorParam = request.getParameter( "errorParam" );
		   System.out.println( "PARAMETRO: " + vErrorParam ); 
	 
		   NAVEGACION = "login";
			
	       ModelAndView objNavegacion = new ModelAndView( NAVEGACION ); 
	         
	       if( vErrorParam != null ){
	           objNavegacion.addObject( "errorParam", "TRUE" );
	           objNavegacion.addObject( "mensajeError_01", Constantes.SECURITY_MSG_ERROR_01 );
	           objNavegacion.addObject( "mensajeError_02", Constantes.SECURITY_MSG_ERROR_02 );
	           objNavegacion.addObject( "mensajeError_03", Constantes.SECURITY_MSG_ERROR_03 );
	       }
	       
	       return objNavegacion;
	}
	
	
	
	
	/**Navegacion**/
	@RequestMapping(value = "/vistanavegacion.do", method=RequestMethod.GET)
	public ModelAndView vistaNavegacion( ModelMap modelo, HttpServletRequest request ){

		ModelAndView objNavegacion=new ModelAndView();
		try{

		Utilitarios util=new Utilitarios();
		String rutaNaveg=util.vistaNavegacion(request.getParameter("menu").toString());
        objNavegacion = new ModelAndView(rutaNaveg); 	
		}catch (Exception e) {
		System.out.println(e);
		e.printStackTrace();	
		}
		return objNavegacion;
	}
	
	
}


